# 凡二进制运算时，数据长度均一致。（详细见图按位与运算符运算示例.png）
a = 60
b = 13
print(bin(a))   # 使用bin()使数据转化为二进制。
print(bin(b))
print("\t")     # 其实\t加不加无所谓。

# 按位与运算符（&）的工作原理：将十进制的数转化为二进制去运算。
# 将十进制的某两个数转化为二进制后，上下对应进行0和1的判断。
# 与的计算：两个“1”表示两个真，则为“1”；两个“0”表示两个假，则为“0”；一真一假则为“0”。
# 再将得出的二进制的数转化为十进制输出。

#示例1
c = a & b
print(bin(c))
print("以下输出的是'按位与'的运算结果：" , c)   # 注意这里是使用逗号连接！


# 按位或运算符（|）的工作原理：也是基于二进制的运算。
# 或的计算：凡存在“1”即真，不管上下，结果都是“1”即真。其余则是假。
# 输出仍是十进制。

#示例2
d = a | b
print("")    # 为了输出结果美观。
print(bin(d))
print("以下输出的是'按位或'的运算结果：" , d)


# 按位异或运算符（^）的工作原理：也是基于二进制的运算。
# 异或的计算： 凡上下都存在“1”或者都存在“0”结果都是假，即“0”；若一真一假则为“1”。
# 输出同上。

#示例3
e = a ^ b
print("")
print(bin(e))
print("以下输出的是'按位异或'的运算结果：" , e)


# 按位取反运算符（~）的工作原理：也是基于二进制的运算。
# 按位取反运算符的计算："""(a+1)x-1""" (注意输出结果！暂时跳过原理部分) 
# 输出同上。

#示例4
f = ~ a
print("")
print(bin(f))
print("以下输出的是'按位取反'的运算结果：" , f)


# 左移、右移运算符（<< / >>）的工作原理：也是基于二进制的运算。
# 左移、右移的计算： 表示将二进制向左、向右移动。
# 输出同上。

#示例5
g = a << 2
h = a >> 2
print("")
print(bin(g),bin(h))
print("左移后的运算结果：" , g)
print("右移后的运算结果：" , h)